www.gusucode.com > VC++ 模仿书本翻页效果的TXT电子书阅读器 > VC++ 模仿书本翻页效果的TXT电子书阅读器/code/TXTReader/Note.cpp

    //Download by http://www.NewXing.com
// Note.cpp: implementation of the CNote class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "txtreader.h"
#include "Note.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CNote::CNote()
{
	m_totalNote = 0;
	m_NoteList.SetSize(0,NOTE_INIT_AMOUNT);
}
CNote::~CNote()
{
	UnLoadNotes();
}
void  CNote::LoadNotes(CString pathname,int start)
{
	if(!m_totalNote)
		UnLoadNotes();

	CFile loadFile;
	if(!loadFile.Open(pathname,CFile::modeRead | CFile::modeNoTruncate))
	{
		MessageBox(NULL,"读取注释失败!","提示",MB_OK | MB_ICONWARNING);
		return;
	}
	loadFile.Seek(start,CFile::begin);
	loadFile.Read(&m_totalNote,sizeof(int));
	int count = m_totalNote;
	while(count>0)
	{
		NoteNode *pNote = new NoteNode;
		loadFile.Read(pNote,sizeof(NoteNode));
		m_NoteList.Add(pNote);
		count--;
	}
	loadFile.Close();
}
void CNote::UnLoadNotes()
{
	for(int i=0;i<m_totalNote;i++)
	{
		NoteNode*pNote = (NoteNode*)m_NoteList.GetAt(i);
		delete pNote;
	}
	m_NoteList.RemoveAll();
	m_NoteList.SetSize(0,NOTE_INIT_AMOUNT);
	m_totalNote = 0;

}
void CNote::SaveNotestoFile(CString pathname,int start)
{
	if(!m_totalNote)
		return;
	CFile saveFile;
	if(!saveFile.Open(pathname,CFile::modeWrite | CFile::modeNoTruncate))
	{
		MessageBox(NULL,"保存注释失败!","提示",MB_OK | MB_ICONWARNING);
		return;
	}
	saveFile.Seek(start,CFile::begin);
	saveFile.Write(&m_totalNote,sizeof(int));
	for(int i=0;i<m_totalNote;i++)
	{
		NoteNode*pNote = (NoteNode*)m_NoteList.GetAt(i);
		saveFile.Write(pNote,sizeof(NoteNode));
	}
	saveFile.Close();
}
void CNote::AddNote(NoteNode*pNote)
{
	for(int i=0;i<m_totalNote;i++)
	{
		NoteNode*pNoteCur = (NoteNode*)m_NoteList.GetAt(i);
		if(pNote->page==pNoteCur->page && pNote->line == pNoteCur->line)
		{
			delete pNoteCur;
			m_NoteList.SetAt(i,pNote);
			return;
		}
	}
	m_NoteList.Add(pNote);
	m_totalNote++;
}

bool CNote::RemoveNote(UINT page,UINT line)
{
	for(int i=0;i<m_totalNote;i++)
	{
		NoteNode*pNote = (NoteNode*)m_NoteList.GetAt(i);
		if(pNote->page == page && pNote->line == line)
		{
			delete pNote;
			m_NoteList.RemoveAt(i);
			m_totalNote--;
			return true;
		}
	}
	return false;
}
NoteNode* CNote::GetNote(UINT page,UINT line)
{
	for(int i=0;i<m_totalNote;i++)
	{
		NoteNode*pNote = (NoteNode*)m_NoteList.GetAt(i);
		if(pNote->page == page && pNote->line == line)
		{
			return pNote;
		}
	}
	return NULL;
}

void CNote::ShowTipDlg(NoteNode*pNote)
{
	CNoteDlg dlg;
	dlg.m_nPage = pNote->page;
	dlg.m_nLine = pNote->line;
	dlg.m_pTxt = &(((CTXTReaderDlg*)m_pWnd)->m_txt);
	dlg.m_strNote = pNote->note;
	dlg.DoModal();
}

void CNote::InitTip(CWnd*pWnd)
{
	m_pWnd = pWnd;
}